Spring Cloud 之服务网关 Zuul (一) 您所在的位置:网站首页 spring cloud 编排 Spring Cloud 之服务网关 Zuul (一)

Spring Cloud 之服务网关 Zuul (一)

2024-07-10 15:52| 来源: 网络整理| 查看: 265

Spring Cloud 之服务网关 Zuul (一)

文章目录 诞生背景Zuul 能解决哪些问题简单案例创建 Eureka-server 工程创建 Zuul Server 工程创建 good-server 服务 路由配置简化配置映射到 url路由前缀路由通配符

诞生背景

微服务架构体现了面向服务开发的敏捷性. 很多公司开始重构应用, 拆解服务. 出现一个新的问题: 有时候完成某个业务, 需要到不同的主机和不同的端口上面调取接口. 服务多了以后, 这是一件很麻烦的过程. 逐渐诞生了一个面向服务治理、服务编排的组件–微服务网关

Zuul 能解决哪些问题

Zuul 是从设备或者网站请求后端应用程序的一个大门. 为内部服务提供了可配置的对外 URL 到服务的映射关系, 基于 JVM的后端路由器:

认证和鉴权动态路由压力测试负载削减 简单案例

项目结构

zhiqu |_ eureka-server |_ pom.xml |_ gateway-zuul |_ pom.xml |_ good-server |_ pom.xml 创建 Eureka-server 工程

参考: https://blog.csdn.net/zjhcxdj/article/details/104637536

创建 Zuul Server 工程

pom.xml 配置, 需要引入 Zuul 依赖

org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-netflix-zuul

application.yml 配置

eureka: client: serverUrl: defaultZone: http://localhost:8761/eureka/ instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 15 perfer-in-address: true server: port: 8765 spring: application: name: gateway-zuul zuul: routes: good-server: path: /good-server/** serviceId: good-server

最后 5 行配置的意思是, 把所有以 good-server 开头的 URL 映射到 good-server 这个服务上去. 即可以通过访问 gateway-zuul 服务, 间接的访问 good-server 服务

启动类, 要添加 @EnableZuulProxy 注解

@EnableAutoConfiguration @EnableDiscoveryClient @EnableZuulProxy public class ZuulServerApplication { public static void main(String[] args){ SpringApplication.run(ZuulServerApplication.class,args); } } 创建 good-server 服务

pom 文件配置

org.springframework.cloud spring-cloud-starter-netflix-eureka-client

application.yml 配置

eureka: client: serverUrl: defaultZone: http://localhost:8761/eureka/ instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 15 perfer-in-address: true server: port: 8764 spring: application: name: good-server

项目启动类

@SpringBootApplication public class GoodServerApplication { public static void main(String[] args) { SpringApplication.run(GoodServerApplication.class, args); } }

写一个 Restful 接口

@RestController @RequestMapping("/goods") public class GoodController { @GetMapping("/{id}") public String getGood(@PathVariable("id") String id) { return "good"; } }

测试

直接访问 good-server 服务

http://localhost:8764/goods/fdafda

返回: good

通过 gateway-zuul 服务间接访问 good-server 服务

http://localhost:8765/good-server/goods/fdafda

返回:good

当向 gateway-zuul 发送请求的时候, 网关会向 Eureka 拉取服务列表, 然后按照路由映射规则(url 前缀:good-server -> 服务id: good-server) 路由到相应的服务上去

路由配置 简化配置

Zuul 的配置可以简化, 下面是 /good-server/** 请求映射到 good-server 服务的路由规则

zuul: routes: good-server: /good-server/**

或者可以直接把映射规则和 serviceId 都去掉, Zuul 会生成默认的映射规则(good-server: /good-server/**):

zuul: routes: good-server: # 等价于 => # zuul: # routes: # good-server: # path: /good-server/** # serviceId: good-server 映射到 url

如果想映射大一个具体的物理地址, 把serviceId 替换成 url 就可以了

zuul: routes: good-server: path: /good-server/** url: http://localhost: 8764 # good-server 的地址 路由前缀

一般做版本配置的时候, 会给所有的 url 加一个版本前缀:

zuul: prefix: /v1 routes: good-server:

这样请求路径会变成: /v1/joke-server/**

路由通配符 规则说明示例/**匹配任意数量的路径和字符/good-server/aa、/good-server/bb/cc/*匹配任意数量的字符/good-server/aa、/good-server/dddd/?匹配单个字符/good-server/a、/good-server/b


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有